home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
taropyon
/
hewin
/
ccisrc
/
tdptmp.cci
< prev
next >
Wrap
Text File
|
1993-11-30
|
3KB
|
127 lines
/*************************************************************************
* テンプレート機能
*************************************************************************/
char *_tdpTmp = NULL; /* テンプレート管理用ワーク */
int _tdpTmpData_open()
{
char tmp[256];
if ( _tdpTmp == NULL )
{
if ( (_tdpTmp = AMAC_allocWork(0)) == NULL )
return (ERR);
sprintf( tmp,"%s%s", AplGetStartPath(), "tdptmp.tbl" );
AMAC_load( _tdpTmp, tmp );
}
return (NORMAL);
}
/*************************************************************************
* テンプレート機能
*************************************************************************/
int TxdUsr_template( char *txd )
{
char word[256], tmp[4];
int ch, len;
size_t curLnL, curOfs, lnL;
char *s;
if ( _tdpTmpData_open() )
return (ERR);
if ( TxdGet_selFlag(txd) != 0 ) /* 選択中なら処理しない */
return (0);
/* 現在カーソル位置を保存 */
curLnL = TxdGet_curPosLnL(txd);
if ( (curOfs = TxdGet_curPosOfs(txd)) == 0 )
return (NORMAL);
TXD_cmdJump( txd, TXD_PREVWORD ); /* 1ワード戻る */
if ( TxdGet_curPosLnL(txd) < curLnL )
TXD_cmdJump( txd, TXD_CUR_RIGHT );
if ( (ch = TXD_getch(txd)) < 0 || (isalpha(ch) == 0 && ch != '_') )
{
TXD_jumpPos( txd, curLnL, curOfs );
return (NORMAL);
}
len = 0;
while( len < 255 )
{
ch = TXD_getch(txd);
TXD_cmdJump( txd, TXD_CUR_RIGHT );
if ( isalpha(ch) || ch == '_' )
{
word[len++] = ch;
} else
break;
}
word[len] = '\0';
TXD_jumpPos( txd, curLnL, curOfs );
if ( len == 0 )
return (NORMAL);
if ( (s = AMAC_getName( _tdpTmp, word )) == NULL )
return (NORMAL); /* 登録データなし */
while ( *s )
{
ch = (*s) & 0xFF;
++s;
switch ( ch )
{
case '\x02': /* 行頭に */
TXD_cmdJump( txd, TXD_TOPOFLINE );
break;
case '\x06': /* 行末に */
TXD_cmdJump( txd, TXD_LASTOFLINE );
break;
case '\x08': /* BS */
TXD_cmdJump( txd, TXD_BS );
break;
case '\n': /* 改行 */
TXD_cmdJump( txd, TXD_CR );
break;
case '\x0B': /* ホーム位置 */
TXD_jumpPos( txd, curLnL, curOfs );
break;
case '\x1C': /* カーソル右 */
TXD_cmdJump( txd, TXD_CUR_RIGHT );
break;
case '\x1D': /* カーソル左 */
TXD_cmdJump( txd, TXD_CUR_LEFT );
break;
case '\x1E': /* カーソル上 */
TXD_cmdJump( txd, TXD_CUR_UP );
break;
case '\x1F': /* カーソル下 */
TXD_cmdJump( txd, TXD_CUR_DOWN );
break;
case '\x7F': /* 1文字削除 */
TXD_cmdJump( txd, TXD_DEL_CHAR );
break;
default:
if ( iskanji(ch) && iskanji2(*s) )
{ /* 全角 */
tmp[0] = ch;
tmp[1] = *s; ++s;
tmp[2] = '\0';
TXD_setBuf( txd, 0, 2, tmp );
} else
{
tmp[0] = ch;
tmp[1] = '\0';
TXD_setBuf( txd, 0, 1, tmp );
}
break;
}
}
return (NORMAL);
}